(define-macro (switch expr cases)
  (let ((val expr))
    (cons 'cond
          (map (lambda (case)
                 (cons (list 'eqv? val (list 'quote (car case)))
                       (cdr case)))
               cases))))
